package com.wandian.games.tools;

/**
 * @author Administrator
 * @date 2020/8/15-12:30
 * @description 多游sdk加密
 **/
import android.content.Context;

import com.blankj.utilcode.util.DeviceUtils;
import com.mylib.libcore.AppContext;
import com.mylib.libcore.utils.DevicesIDUtil;
import com.mylib.libcore.utils.UIUtils;

import org.json.JSONObject;

import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import static com.mylib.libcore.config.AppConfig.DUOYOU_APP_ID;
import static com.mylib.libcore.config.AppConfig.DUOYOU_AppSecret;

public class DUOYOUSdkSign {
    public static String getDeviceIdsEncode(Context context ){
        String deviceIdsEncode =  AppContext.getInstance().getAppPreferencesHelper().getKeyValue("device_ids");
        try {
            if(UIUtils.isEmpty(deviceIdsEncode)){
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("1", DevicesIDUtil.getDeviceIDAll(context)+""); // 获取手机第一个imei。
                jsonObject.put("2", DevicesIDUtil.getDeviceIDAll(context)+""); // 获取手机第二个imei。
                deviceIdsEncode = URLEncoder.encode(jsonObject.toString(), "utf-8");
                AppContext.getInstance().getAppPreferencesHelper().setKeyValue("device_ids",deviceIdsEncode);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return deviceIdsEncode;
    }
    public static String getSign(Context context ){
        String sign="";
        try {
            // 第一步组装map
            Map<String, String> paramsMap = new HashMap();
            // 多个imei，请组成json字符串发过来，然后对device_ids,需要encode一下。
            JSONObject jsonObject = new JSONObject();
           String deviceIdsEncode =  AppContext.getInstance().getAppPreferencesHelper().getKeyValue("device_ids");
           if(UIUtils.isEmpty(deviceIdsEncode)){
               jsonObject.put("1",  DevicesIDUtil.getDeviceIDAll(context)+""); // 获取手机第一个imei。
               jsonObject.put("2",  DevicesIDUtil.getDeviceIDAll(context)+""); // 获取手机第二个imei。
               deviceIdsEncode = URLEncoder.encode(jsonObject.toString(), "utf-8");
               AppContext.getInstance().getAppPreferencesHelper().setKeyValue("device_ids",deviceIdsEncode);
           }
            paramsMap.put("device_ids", deviceIdsEncode);
            paramsMap.put("device_type", "2");
            paramsMap.put("media_id", DUOYOU_APP_ID);
            paramsMap.put("user_id",  AppContext.getInstance().getAppPreferencesHelper().getKeyValue("user_id"));
            // 第二步生成sign，第二个参数是AppSecret，务必换成你的AppSecret
            sign = generateSignature(paramsMap, DUOYOU_AppSecret);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return sign;
    }
    /**
     *
     * data : 参数map key：appSecret
     *
     */
    public static String generateSignature(final Map<String, String> data, String key) throws Exception {
        Set<String> keySet = data.keySet();
        String[] keyArray = keySet.toArray(new String[keySet.size()]);
        Arrays.sort(keyArray);
        StringBuilder sb = new StringBuilder();
        for (String k : keyArray) {
            if (k.equals("sign")) {
                continue;
            }
            sb.append(k).append("=").append(data.get(k)).append("&");
        }
        sb.append("key=").append(key);
        return MD5(sb.toString()).toLowerCase();
    }
    public static String MD5(String data) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] array = md.digest(data.getBytes("UTF-8"));
            StringBuilder sb = new StringBuilder();
            for (byte item : array) {
                sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
            }
            return sb.toString().toLowerCase();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }
}